/* 
寄生组合式继承：结合借用构造函数传递参数和寄生模式实现继承
*/
// 寄生式
function inheritPrototype (subType,superType) {
    // 创建对象
    let __prototype = Object.create(superType.prototype)  //创建父类原型的一个副本
    // 指定对象
    subType.prototype = __prototype    //将新创建的对象赋值给子类的原型
    // 增强对象
    __prototype.constructor = subType  //防止因重写原型而失去默认的constructor属性
}
// 父类初始化实例属性和原型属性
function SuperFun (name,age) {
    // 公共的属性
    this.name = name
    this.age = age
    this.has = ['头发','眼睛','鼻子']
}
// 公共方法
SuperFun.prototype.getSuperValue = function () {
    console.log('都有'+this.has);
    console.log(this.age+'岁'+this.name+'在晨跑锻炼');
}
//  借用构造函数传递增强子类实例属性（支持传参和避免篡改）
function SubFun (name,age,sex) {
   //  通过拷贝父类
   SuperFun.call(this,name,age) // 所有子类都有父类实例函数的副本
   this.sex = sex
}
// 将父类原型指向子类
inheritPrototype(SubFun,SuperFun)
// 新增子类原型属性
SubFun.prototype.saySex = function () {
    console.log(this.sex);
}
let instance1 = new SubFun('ss',12,'女')
instance1.has.push('aa')
let instance2 = new SubFun('gg',11,'男')
instance2.has.push('bb')
console.log(instance1);
console.log(instance2);